gorgonia.org/gorgonia@v0.9.17/cuda modules/src/misc.cu (about) 1 #define _USE_MATH_DEFINES 2 #include <math.h> 3 4 #define THREADID \ 5 int blockId = blockIdx.x + blockIdx.y * gridDim.x + gridDim.x * gridDim.y * blockIdx.z;\ 6 int idx = blockId * (blockDim.x * blockDim.y * blockDim.z) + (threadIdx.z * (blockDim.x * blockDim.y)) + (threadIdx.y * blockDim.x) + threadIdx.x; 7 8 #define CHECKSIZE \ 9 if (idx >= size) { \ 10 return; \ 11 } 12 13 extern "C" { 14 __global__ void hasNaN_f32(float* A, int size, int* retVal) { 15 THREADID 16 CHECKSIZE 17 if (isnan(A[idx])) { 18 (*retVal)++; 19 } 20 return; 21 } 22 } 23 24 extern "C" { 25 __global__ void hasNaN_f64(double* A, int size, int* retVal) { 26 THREADID 27 CHECKSIZE 28 if (isnan(A[idx])) { 29 (*retVal)++; 30 } 31 return; 32 } 33 } 34 35 extern "C" { 36 __global__ void hasInf_f32(float* A, int size, int* retVal) { 37 THREADID 38 CHECKSIZE 39 if (isinf(A[idx])) { 40 (*retVal)++; 41 } 42 return; 43 } 44 } 45 46 47 extern "C" { 48 __global__ void hasInf_f64(double* A, int size, int* retVal) { 49 THREADID 50 CHECKSIZE 51 if (isinf(A[idx])) { 52 (*retVal)++; 53 } 54 return; 55 } 56 } 57 58 /* 59 */